//package com.zlm.spider.processor;
//
///**
// * Author: Harbour
// * Date: 2021-04-13 18:50
// * Desc:
// */
//
//import com.zlm.spider.test.MathSalary;
//import com.zlm.spider.test.SpringDataPipeline;
//import org.jsoup.Jsoup;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//import us.codecraft.webmagic.Page;
//import us.codecraft.webmagic.Site;
//import us.codecraft.webmagic.Spider;
//import us.codecraft.webmagic.processor.PageProcessor;
//import us.codecraft.webmagic.scheduler.BloomFilterDuplicateRemover;
//import us.codecraft.webmagic.scheduler.QueueScheduler;
//import us.codecraft.webmagic.selector.Html;
//import us.codecraft.webmagic.selector.Selectable;
//
//import java.util.List;
//
//@Component
//public class JobProcessor1 implements PageProcessor {
//    private int yema=2;
//    private String url = "https://search.51job.com/list/000000,000000,0000,00,9,99,java,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=";
//
//    @Override
//    public void process(Page page) {
//
//        System.out.println("process执行。。。。");
//        //解析页面，获取招聘信息详情的url地址
//        List<Selectable> list = page.getHtml().regex("\"job_href\":\"(.*?)\"").nodes();
//        //判断获取到的集合是否为空
//        if (list.size() == 0) {
//            // 如果为空，表示这是招聘详情页,解析页面，获取招聘详情信息，保存数据
//            this.saveJobInfo(page);
//        } else {
//            //如果不为空，表示这是列表页,解析出详情页的url地址，放到任务队列中
//            for (Selectable selectable : list) {
//                //获取url地址
//                String jobInfoUrl = selectable.toString();
//                jobInfoUrl = jobInfoUrl.replace("\\","");
//                //把获取到的url地址放到任务队列中
//                page.addTargetRequest(jobInfoUrl);
//            }
//            if (this.yema<100)
//            {
//                //下一页的url
//                String next_url = "https://search.51job.com/list/000000,000000,0000,00,9,99,java,2,"+this.yema+".html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=";
//                //把url放到任务队列中
//                page.addTargetRequest(next_url);
//                this.yema = this.yema+1;
//            }
//        }
//    }
//    //解析页面，获取招聘详情信息，保存数据
//    private void saveJobInfo(Page page) {
//
//        System.out.println("保存页面信息。。。。");
//
//        //创建招聘详情对象
//        JobInfo jobInfo  = new JobInfo();
//        //解析页面
//        Html html = page.getHtml();
//        //获取数据，封装到对象中
//        jobInfo.setCompanyName(html.css("p.cname > a","text").toString());
//        String tmp = html.css("p.ltype","title").toString();
//        String[] strings = tmp.split("  |  ");
//        jobInfo.setCompanyAddr(strings[0]);
//        jobInfo.setCompanyInfo(Jsoup.parse(html.css("div.tmsg").toString()).text());
//        jobInfo.setJobName(html.css("div.in > div.cn > h1","text").toString());
//        jobInfo.setJobAddr(html.css("div.bmsg > p.fp","text").toString());
//        jobInfo.setJobInfo(Jsoup.parse(html.css("div.job_msg").toString()).text());
//        jobInfo.setUrl(page.getUrl().toString());
//        //获取薪资
//        Integer[] salary = MathSalary.getSalary(html.css("div.cn strong", "text").toString());
//        jobInfo.setSalaryMin(salary[0]);
//        jobInfo.setSalaryMax(salary[1]);
//        //获取发布时间
//        String time = html.css("p.ltype","title").regex("\\d\\d-\\d\\d发布").toString();
//        jobInfo.setTime(time.substring(0,time.length()-2));
//        //把结果保存起来
//        page.putField("jobInfo",jobInfo);
//    }
//
//
//    private Site site = Site.me()
//            .setCharset("gbk")//设置编码
//            .setTimeOut(10 * 1000)//设置超时时间
//            .setRetrySleepTime(3000)//设置重试的间隔时间
//            .setRetryTimes(3);//设置重试的次数
//
//    @Override
//    public Site getSite() {
//        return site;
//    }
//
//    @Autowired
//    private SpringDataPipeline springDataPipeline;
//
//    //initialDelay当任务启动后，等等多久执行方法
//    //fixedDelay每个多久执行方法
//    @Scheduled(initialDelay = 1000, fixedDelay = 1000 * 10)
//    public void process() {
//        Spider.create(new JobProcessor())
//                .addUrl(url)
//                .setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(100000)))
//                .thread(10)
//                .addPipeline(this.springDataPipeline)
//                .run();
//    }
//}
